--
-- Author: dbliu
-- Date: 2014-02-27 10:37:42
--
--=model=========================================================================================================
local EMPropBullet = import(".EMProp")
--=view=========================================================================================================
--
-- Author: dbliu
-- Date: 2014-02-17 11:13:13
--


local EV = import("..EV")

local EVPropBullet = class("EVPropBullet",EV)

function EVPropBullet:ctor(model)
	EVPropBullet.super.ctor(self,model)
	
	local cls = model.class

	--[[通过代理注册事件的好处：可以方便的在视图删除时，清理所有通过该代理注册的事件，
	同时不影响目标对象上注册的其他事件]]
	cc.EventProxy.new(model,self)
		
		:addEventListener(cls.START_EVENT, self.onStart, self)
		:addEventListener(cls.KILL_EVENT, self.onKill, self)
		:addEventListener(cls.FALL_EVENT, self.onFall, self)
		
end


function EVPropBullet:onStart( event )
	local frames = display.newFrames("enemy5_fly_%d.png", 1, 1)
	local animation = display.newAnimation(frames, 0.6 / 4)
	
	self.sprite_:playAnimationForever(animation)

    self.sprite_:setPosition(event.x, event.y)

    print("function EVPropBullet:onStart( event )")

end

function EVPropBullet:onKill( event )
	

--	audio.playSound("music/enemy5_down.mp3")

	self:removeController()
end

function EVPropBullet:onFall( event )
	print(event)

	-- create body
    self.body_ = app.world:createCircleBody(10, 40)

    self.body_:setIsSensor(true)

    self.body_:setCollisionType(8)
    self.body_:setElasticity(0.1)
    -- binding sprite to body
    self.body_:bind(self.sprite_)
    -- set body position
    self.body_:setPosition(self.sprite_:getPositionX(),self.sprite_:getPositionY())

    self.body_:setVelocity(0,-120)
end

function EVPropBullet:removeController()
	self:getParent():removeSelf(true)
end


--=controller=========================================================================================================
local ECProp = import(".ECProp")
local ECPropBullet = class("ECPropBullet",ECProp)

function ECPropBullet:ctor(x,y)

    self.model_ = EMPropBullet.new({id = "prop_bullet"})
    

    self.view_ = EVPropBullet.new(self.model_)
    :pos(display.left, display.bottom)
    :addTo(self)

    self.model_.fsm__:doEvent("start",x,y) 

    -- 注册帧事件
    self:addScriptEventListener(cc.Event.ENTER_FRAME, handler(self, self.tick))

--[[
     -- 在视图清理后，检查模型上注册的事件，看看是否存在内存泄露
    self:addScriptEventListener(cc.Event.CLEANUP, function()
        self.model_:getComponent("components.behavior.EventProtocol"):dumpAllEventListeners()
    end)
]]
end

return ECPropBullet